﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using proyEspacio.baseDato;

namespace proyEspacio.logicaNegocio
{
    public static class admPlaneta
    {
        /// <summary>
        /// Metodo para saber si existe un planeta en la base de datos
        /// </summary>
        /// <param name="busqueda">parametro de busqueda</param>
        /// <returns></returns>
        public static bool existePlaneta(string busqueda)
        {
            espacioEntities bd = new espacioEntities();
            return bd.Planeta.Any(g => g.Nombre == busqueda);
        }
        /// <summary>
        /// Metodo que permite ingresar un nuevo planeta a la base de datos
        /// </summary>
        /// <param name="entrada">Nombre del planeta</param>
        /// <param name="idSistema">Identificador de sistema planetario</param>
        /// <returns></returns>
        public static string ingresaPlaneta(string entrada, int idSistema)
        {
            var existe = existePlaneta(entrada);
            if (existe)
            {
                return "";
            }
            else
            {
                espacioEntities bd = new espacioEntities();
                Planeta ingreso = new Planeta
                {
                    Nombre = entrada,
                    Id_sistema=idSistema
                };
                bd.Planeta.Add(ingreso);
                bd.SaveChanges();
                return "Nuevo planeta ingresado";
            }
        }
        /// <summary>
        /// Busca todos los planetas pertenecientes a un sistema planetario
        /// </summary>
        /// <param name="planetas">Lista de planetas ya encontrados</param>
        /// <param name="idSistema">Identificador de sistema planetario</param>
        /// <returns></returns>
        public static Planeta buscaPlanetas(List<string> planetas, int idSistema)
        {
            espacioEntities bd = new espacioEntities();
            return bd.Planeta.FirstOrDefault(p => p.Id_sistema == idSistema & !planetas.Contains(p.Nombre));
        }
        /// <summary>
        /// Busca un planeta en especifico
        /// </summary>
        /// <param name="busqueda">nombre de planeta</param>
        /// <returns></returns>
        public static Planeta buscaPlaneta(string busqueda)
        {
            espacioEntities bd = new espacioEntities();
            return bd.Planeta.FirstOrDefault(p => p.Nombre==busqueda);
        }
        /// <summary>
        /// Elimina un Planeta de la base de datos
        /// </summary>
        /// <param name="planeta">planeta a eliminar</param>
        /// <returns>un mensaje</returns>
        public static string eliminaPlaneta(string planeta)
        {
            espacioEntities bd = new espacioEntities();
            Planeta eliminar = bd.Planeta.FirstOrDefault(p => p.Nombre == planeta);
            admSatelite.eliminaSatelites(eliminar.Id_planeta);
            bd.Planeta.Remove(eliminar);
            bd.SaveChanges();
            return "Planeta eliminado";
        }
        /// <summary>
        /// Elimina un grupo de planetas que sean del mismo sistema planetario
        /// </summary>
        /// <param name="idSistema">Identificador de sistema planetario</param>
        /// <returns></returns>
        public static string eliminaPlanetas(int idSistema)
        {
            espacioEntities bd = new espacioEntities();
            Planeta eliminar = null;
            do
            {
                eliminar = bd.Planeta.FirstOrDefault(p => p.Id_sistema == idSistema);
                admSatelite.eliminaSatelites(eliminar.Id_planeta);
                bd.Planeta.Remove(eliminar);
                bd.SaveChanges();
            } while (eliminar != null);
            return "Planetas eliminados";
        }
        /// <summary>
        /// Permite editar el nombre de un planeta
        /// </summary>
        /// <param name="idPlaneta">Identificador de planeta</param>
        /// <param name="nombre">Nombre nuevo del planeta</param>
        /// <returns>un mensaje</returns>
        public static string editaPlaneta(int idPlaneta, string nombre)
        {
            espacioEntities bd = new espacioEntities();
            Planeta editar = bd.Planeta.Find(idPlaneta);
            editar.Nombre = nombre;
            bd.SaveChanges();
            return "Datos actualizados";
        }
    }
}
